//静态内部类：

import java.util.Comparator;
import java.util.PriorityQueue;

class OuterClass2 {
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;
    //静态内部类:
    static class InnerClass {
        public int data4 = 4;
        private int data5 = 5;
        public static int data6 = 6;//静态就可以写静态成员变量

        public void test() {
            System.out.println(new OuterClass2().data1);
            System.out.println(new OuterClass2().data2);
            //上面两个由于是访问外部类的变量，不能直接访问
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
            System.out.println("InnerClass::test()");
        }
    }
}

//匿名内部类：

class Test {
    public void test() {
        System.out.println("test()haha!");
    }
}

public class TestDemo2 {
    public static void main(String[] args) {
        //重写一个类的方法
        new Test(){
            @Override
            public void test() {
                System.out.println("我是重写的test方法");
            }
        }.test();

        //优先及队列也是匿名内部类的例子
        PriorityQueue<Integer> prio = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return 0;
            }
        });

    }
    public static void main1(String[] args) {
        //实例化一个静态内部类对象
        OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();
    }
}